// 给你一个正整数的数组 A（其中的元素不一定完全不同），
// 请你返回可在 一次交换（交换两数字 A[i] 和 A[j] 的位置）后得到的、按字典序排列小于 A 的最大可能排列。
// 如果无法这么操作，就请返回原数组。

// 示例 1：
// 输入：arr = [3,2,1]
// 输出：[3,1,2]
// 解释：交换 2 和 1

// 示例 2：
// 输入：arr = [1,1,5]
// 输出：[1,1,5]
// 解释：已经是最小排列

// 示例 3：
// 输入：arr = [1,9,4,6,7]
// 输出：[1,7,4,6,9]
// 解释：交换 9 和 7

// 示例 4：
// 输入：arr = [3,1,1,3]
// 输出：[1,3,1,3]
// 解释：交换 1 和 3

// 提示：
//     1 <= arr.length <= 104
//     1 <= arr[i] <= 104

/**
 * @param {number[]} arr
 * @return {number[]}
 */
var prevPermOpt1 = function(arr) {
    ///字典序小于原数组说明：如果是升序序列则不用改变，现在就要从后往前找第一个降序的值A
    ////排列要最大说明需要找仅次于A的值
    let len = arr.length;
    for(let i = len - 1; i >= 0; i--) {
        if(arr[i] < arr[i - 1]) {
            for(let j = len - 1; j > i - 1; j--) {
                if (arr[j] < a[i - 1] && a[j] !== a[j - 1]) {
                    [arr[j], arr[i - 1]] = [arr[i - 1], arr[j]];
                    return arr;
                }
            }
        }
    }
    return arr;
};
console.log(prevPermOpt1([1,9,4,6,7]));

